package pl.edu.pk.psb.bc.dto;

import java.util.ArrayList;
import java.util.List;

import pl.edu.pk.psb.bc.util.Miejsce;

/**
 * Sala zaimpementowana jako lista list. Glowna lista to lista rzedow, gdzie rzad to lista miejsc
 * 
 */
public class SalaDto {
	private List<List<MiejsceDto>> miejsca;

	public SalaDto() {
		// pusty konstruktor
	}

	/**
	 * Konstruktor tworzy pusta(typ miejsca=BRAK) sale o podanych wymiarach
	 * 
	 * @param iloscRzedow
	 *            Ilosc rzedow sali
	 * @param iloscMiejsc
	 *            Ilosc Miejsc w rzedzie
	 */
	public SalaDto(int iloscRzedow, int iloscMiejsc) {
		miejsca = new ArrayList<List<MiejsceDto>>();
		for (int numerRzedu = 0; numerRzedu < iloscRzedow; numerRzedu++) {
			// tworzymy odpowiednie rozmiary sali i ustawiamy wszedzie typ
			// miejsca BRAK
			List<MiejsceDto> rzad = new ArrayList<MiejsceDto>();
			miejsca.add(rzad);
			for (int numerMiejsca = 0; numerMiejsca < iloscMiejsc; numerMiejsca++) {
				rzad.add(new MiejsceDto(Miejsce.BRAK));
			}
		}
	}

	/**
	 * Ustawia podane miejsce w sali w podanym miejscu
	 * 
	 * @param rzad
	 *            Rzad w ktorym trzeba wstawic miejsce
	 * @param fotel
	 *            Fotel w ktorym trzeba wstawic miejsce
	 * @param miejsce
	 *            Miejsce do wstawienia
	 */
	public void setMiejsce( MiejsceDto miejsce) {
		miejsca.get(miejsce.getRzad() - 1).set(miejsce.getFotel() - 1, miejsce);
	}

	/**
	 * Pobiera miejsce o wskazanych wspolrzednych
	 * 
	 * @param rzad
	 *            Rzad z ktorego pobierane jest miejsce
	 * @param fotel
	 *            Fotel z ktorego pobierane jest miejsce
	 * @return
	 */
	public MiejsceDto getMiejsce(int rzad, int fotel) {
		return miejsca.get(rzad - 1).get(fotel - 1);
	}

	/**
	 * Pobiera ilosc rzedow w sali
	 * 
	 * @return ilosc rzedow
	 */
	public int getIloscRzedow() {
		return miejsca.size();
	}

	/**
	 * Pobiera ilosc miejsc w jednym rzedzie
	 * 
	 * @return ilosc miejsc w rzedzie
	 */
	public int getIloscMiejscWRzedzie() {
		return miejsca.get(0).size();
	}

	public List<List<MiejsceDto>> getMiejsca() {
		return miejsca;
	}
	
	public MiejsceDto pobierzMiejsce(int id){
		for (List<MiejsceDto> rzad : miejsca) {
			for(MiejsceDto miejsce : rzad){
				if(miejsce != null && id == miejsce.getId()){
					return miejsce;
				}
			}
		}
		return null;
	}

	public void setMiejsca(List<List<MiejsceDto>> miejsca) {
		this.miejsca = miejsca;
	}

}
